<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'models/m_object.php';

/**
 * Модель контента
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class M_Content extends M_Object {
   
   /**
    * Название таблицы
    *
    * @access protected
    * @var string
    */
   var $_table = 'contents';
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return M_Content
    */
   function M_Content() {
      parent::M_Object();
   } // end M_Content
   
   /**
    * Метод активации
    *
    * @access public
    * @return boolean
    */
   function activate() {
      $sql = "
         UPDATE
            " . $this->db->dbprefix($this->_table) . "
         SET
            status = 'active'
         WHERE
            id_content = " . $this->db->escape($this->get_id('id_content')) . " AND
            status <> 'active'
         LIMIT
            1
      ";
      if (null !== $this->db->query($sql)) {
         return true;
      }
      return false;
   } // end activate
   
   /**
    * Метод приостановки
    *
    * @access public
    * @return boolean
    */
   function pause() {
      $sql = "
         UPDATE
            " . $this->db->dbprefix($this->_table) . "
         SET
            status = 'paused'
         WHERE
            id_content = " . $this->db->escape($this->get_id('id_content')) . " AND
            status <> 'paused'
         LIMIT
            1
      ";
      if (null !== $this->db->query($sql)) {
         return true;
      }
      return false;
   } // end pause
   
   /**
    * Метод устоновки контента по умолчанию
    *
    * @access public
    * @return boolean
    */
   function set_default() {
      $sql = "
         UPDATE
            " . $this->db->dbprefix($this->_table) . "
         SET
            is_default = IF(id_content = " . $this->db->escape($this->get_id('id_content')) . ", 'yes', 'no'),
            status = IF(id_content = " . $this->db->escape($this->get_id('id_content')) . ", 'active', status)
         WHERE
            status <> 'deleted'
      ";
      if (null !== $this->db->query($sql)) {
         return true;
      }
      return false;
   } // end set_default
   
   /**
    * Удаление записи
    *
    * @access protected
    */
   function _delete() {
      // Проверяем на возможность удаления - наличие вложенных элементов
      $sql = "
         SELECT
            1
         FROM
            " . $this->db->dbprefix($this->_table) . "
         WHERE
            id_parent = " . $this->db->escape($this->get_id('id_content')) . " AND
            status <> 'deleted'
         LIMIT
            1
      ";
      $query = $this->db->query($sql);
      if (0 == $query->num_rows()) {
         return parent::_delete();
      }
      return false;
   } // end _delete
   
   /**
    * Получение пути к странице
    *
    * @access public
    * @return string
    */
   function get_url() {
      $url = '';
      if ('yes' == $this->get('is_default')) {
         $url = base_url();
      } elseif ($this->get('link')) {
         // Ссылающаяся страница
         $url = $this->get('link');
      } else {
         // Контент
         // Получаем список всех контентов для построение дерева и построения пути до текущего элемента
         $tree = array();
         if (!$this->registry->exists('menu_tree_' . $this->get('id_menu'))) {
            $sql = "
               SELECT
                  id_content,
                  id_parent,
                  name,
                  status
               FROM
                  " . $this->db->dbprefix($this->_table) . "
               WHERE
                  id_menu = " . $this->db->escape($this->get('id_menu')) . " AND
                  link = ''
               ORDER BY
                  position ASC
            ";
            $query = $this->db->query($sql);
            // Строим дерево
            $this->load->helper('tree');
            $tree = array_tree($query->result_array(), 'id_content', 'id_parent');
            $this->registry->save('menu_tree_' . $this->get('id_menu'), $tree);
         } else {
            $tree = $this->registry->load('menu_tree_' . $this->get('id_menu'));
         }
         // Собираем нужную ветвь дерева в урл
         $url = base_url() . 'page/' . tree_path($tree, 'id_content', 'name', $this->get_id('id_content'), '/') . '.html';
      }
      return $url;
   } // end get_url
   
   /**
    * Получение "правильного" статуса контента
    *
    * @access public
    * @return string
    */
   function get_status() {
      $status = $this->get('status');
      if ('active' == $status) {
         // Получаем список всех контентов для построение дерева и построения пути до текущего элемента
         $tree = array();
         if (!$this->registry->exists('menu_tree_' . $this->get('id_menu'))) {
            $sql = "
               SELECT
                  id_content,
                  id_parent,
                  name,
                  status
               FROM
                  " . $this->db->dbprefix($this->_table) . "
               WHERE
                  id_menu = " . $this->db->escape($this->get('id_menu')) . " AND
                  link = ''
               ORDER BY
                  position ASC
            ";
            $query = $this->db->query($sql);
            // Строим дерево
            $this->load->helper('tree');
            $tree = array_tree($query->result_array(), 'id_content', 'id_parent');
            $this->registry->save('menu_tree_' . $this->get('id_menu'), $tree);
         } else {
            $tree = $this->registry->load('menu_tree_' . $this->get('id_menu'));
         }
         // Собираем нужную ветвь дерева для анализа
         $path = tree_path($tree, 'id_content', 'status', $this->get_id('id_content'), '|');
         if (strstr($path, 'paused')) {
            $status = 'paused';
         }
      }
      return $status;
   } // end get_status
   
}
